|
MounRiver Studio |
http://mounriver.com/ |
| 5.4 编译 |
选中工程目录窗口中的工程,鼠标右键单击,然后点击build project,或者点击快捷工具栏中的 进行编译,console窗口会显示build过程中产生的信息:

图 5.4.1
若编译成功,则编译过程中产生的文件存放在源码目录下的obj文件中。

图 5.4.2
如果需要对编译过程做进一步的配置,选中工程目录窗口中的工程,鼠标右键单击,然后点击
properties,以下为常用配置:

图 5.4.3
选中左侧选项卡 C/C++ Build , 选中右侧选项卡 Behavior:
1. Stop on first build
error
编译遇到第一个错误就停止编译
2. Enable parallel
build
可选择的编译线程个数
3. Build on resource save (Auto build
) 保存文件自动build
4.
Build(incremental
build)
增量编译
5.
Clean
清除build产生的文件
点击左侧选项卡 C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Tool Settings下的Target processor。
RISC-V内核芯片属性配置显示如图5.4.4:

图 5.4.4
Target processor主要设置目标处理器属性,详细信息可以在GCC文档3.18.38 RISC-V Options查看。
1.
Architecture 是指令集架构,rv32i是RISC-V
基础整数指令集
2.
RVM 表示支持乘除法扩展
3.
RVA
表示支持原子扩展
4.
RVF
表示单精度浮点数扩展
5.
RVD
为双精度浮点数扩展
6.
RVC
为压缩指令扩展
7.
RVXW
为自定义压缩指令扩展;支持lbu,lhu,lbusp,lhusp,sb,sh,sbsp,shsp的16位压缩指令
8.
Integer
ABI
为RISC-V应用程序整数二进制接口
9. Floating point
ABI
为RISC-V应用程序浮点数二进制接口
10.Tuning
由微架构优化给定处理器的输出,默认是rocket
11.Code
model
-mcmodel=medlow:
程序及其静态定义的符号必须位于单个2 GiB地址范围内,
并且必须位于绝对地址-2 GiB和+2
GiB之间。程序可以静态或动态链接。
这是默认的代码模型。
-mcmodel=medany:
程序及其静态定义的符号可以任何单个2
GiB地址范围内。
程序可以静态或动态地连接。
12. Small data
limit
在某些目标上将小于n字节的全局和静态变量放进一个特殊的段。
Align 中-mstrict-align -mno-strict-align 取决于处理器是否支持内存的非对齐访问
自然,如果想在浮点寄存中传递浮点参数,需要相应的浮点 ISA 添加 F 或 D 扩展。因此要编译 RV32I 的代码(GCC 选项-march=rv32i),必须使用 ilp32 ABI(GCC选项-mabi=ilp32)。反过来,调用约定并不要求浮点指令一定要使用浮点寄存器,因此 RV32IFD 与 ilp32,ilp32f 和 ilp32d 都兼容。
ARM内核芯片属性配置显示如图5.4.5:

图 5.4.5
1. ARM
family
设置芯片内核类型,如上图CH32F103芯片内核为corte-m3
2.
Architecture
设置指令集架构,上述芯片为ARMV7-M,一般设置完芯片内核,此选项可选为默认。
3. Instruction
set
设置芯片工作模式,thumb或者arm模式。
4. Thumb interwork
生成支持ARM和Thumb之间调用的代码指令集。
如果没有此选项,则在v5之前的架构上,这两个指令集不能在一个程序中可靠地使用。
5.
Endianness
设置大小端,默认为小端
6. unaligned access
设置是否允许非对齐访问,启用(或禁用)来自未对齐16位或32位的地址的
16位和32位值的读取和写入。
默认情况下,未对齐访问为对于所有ARMv6之前的版本,
所有ARMv6-M和ARMv8-M
Baseline体系结构,均禁用;对于所有其他体系结构,则启用。
设置完芯片内核类型,其他选型如不清楚可选择默认属性
点击左侧选项卡 C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Tool Settings下的Optimization,属性页如下图5.4.6所示:

图 5.4.6
该属性页主要是配置GCC的优化选项,想要添加其他优化选项可以写在下方other optimization flags中,常用优化选项含义为:
-O0:
无优化(默认)
-O和-O1:
使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化。
在编译大型程序的时候会显著增加编译时内存的使用。
-O2:
包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化。
编译器不执行循环展开以及函数内联.此选项将增加编译时间和目标文件的执行性能.
-Os: 专门优化目标文件大小,执行所有的不增加目标文件大小的-O2优化选项。
并且执行专门减小目标文件大小的优化选项。
-O3:
打开所有-O2的优化选项并且增加部分参数。
点击左侧选项卡 C/C++ Build
的下拉选项,选择Settings,在右侧弹窗中选择Tool
Settings下的GNU RISC-V Cross C Link ->
Miscellaneous,属性页如下图5.4.7所示:

图5.4.7
此处选项勾选Use wchprintf,会使用简化版的printf函数,减少代码大小,支持常见的%s ,%c,%d,%f,%x,%o类型,支持%m.n d, %m.nf , %0m d, %-m d 等常见格式。
此处选项勾选Use wchprintfloat,会增加打印浮点数功能,相比标准库提供的Use float with nano printf 可以显著减少代码大小。
点击左侧选项卡 C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Build Steps,属性页如下图5.4.8所示:

图 5.4.8
如图红圈位置可以增加编译后执行的指令:
eg:
"${eclipse_home}\toolchain\RISC-V Embedded
GCC\bin\riscv-none-embed-objcopy"
-O
ihex"${ProjName}.elf" "文件存放路径\\${ProjName}.hex"
可用于设置生成hex文件位置
"${eclipse_home}\toolchain\RISC-V Embedded
GCC\bin\riscv-none-embed-objcopy"
-O binary
"${ProjName}.elf""文件存放路径\\${ProjName}.bin"
可用于设置生成bin文件位置
点击左侧选项卡 C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Tool Settings下的Warnings,显示如图5.4.9:

图 5.4.9
1. Check syntax
only
只检查语法错误
2.
Pedantic
严格执行ISO C 和ISO c++要求的所有警告
3. Pedantic warnings as
errors ISO
C 和ISO c++要求的所有警告显示为错误
4. Inhibit all
warnings 禁止全部警告
5.
Warn on various unused
elements
所有-Wunused 参数的集合
6. Warn on uninitialized
variables
未初始化局部变量的警告
7. Enable all common
warning
显示所有警告
8. Enable extra
warnings
显示-wall之外的警告
9. Warn on undeclared global
function
全局函数在头文件中没有声明的警告
10. Warn on implicit
conversion
隐式转换可能改变值的警告
11. Warn if pointer
arithmetic
对函数指针或者void*类型的指针进行算术操作
12. Warn if padding is
included
结构体填充警告
13. Warn if shadow
variable
变量或类型声明遮盖影响了另一个变量
14. Warn if suspicious logic
ops
可疑的逻辑操作符警告
15. Warn if struct is
returned
返回结构、联合或数组时给出警告
16. Warn if floats are compared as
equal
浮点值比较相关的警告
17. Generate errors instead of
warnings
生成错误
代替警告
仅供参考,详见GCC警告参数
点击左侧选项卡 C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Tool Settings下的 GNU RISC-V Cross C Linker下的Miscellaneous。显示出如图5.4.10:

图 5.4.10
在右侧 Other objects中,可另外添加工程中要参与链接的文件,注意参与链接的文件所在的路径中不要包含括号或者特殊字符,点击绿色的加号,如图5.4.11:

图 5.4.11
显示出如图5.4.12:

图 5.4.12
点击 File system或Workspace... ,选中要添加的库文件,点击OK ,添加成功则库文件路径会显示在下方窗口。

图 5.4.13
点击左侧选项卡 C/C++ Build的下拉选项,选择Settings ,在右侧弹窗中选择Tool Settings下的GNU RISC-V Cross C Create FlashImage 下的General。显示出如图5.4.14:

图 5.4.14
在右侧窗口 output file format(-O)中,点击下拉工具可选择生成Intel HEX或者生成Raw binary文件。

图 5.4.15
点击左侧选项卡 C/C++ Build 的下拉选项,选择 Build Artifact ,显示出如图5.4.16:

图 5.4.16
Artifact
type
可下拉选择生成
executable
可执行文件
Static
library
静态库
如果要缩减静态库大小,可选择 Tool Setting 下的 Debugging ,设置Debug level
为NONE
Artifact
name 可更改默认生成的可执行文件等文件的名字,删除原来默认名称,填写自定义的名字。
Output
prefix
库文件名字前缀
点击左侧选项卡 C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Tool Settings下的 GNU RISC-V Cross C Linker下的Libraries。显示出如图5.4.17:

图 5.4.17
在下方方框中点击绿色加号添加库文件路径(路径中不要包含“$”等特殊字符),上方方框中填入库名,库名不要加Lib前缀和.a后缀,以此完成库文件的添加。
以上所有配置如有更改,必须点击相应配置页面的 Apply 或者 Apply and Close 选项,否则更改的配置不生效。